home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 14642 / 14642.xpi / chrome / content / historyThumbnail.js < prev    next >
Text File  |  2009-10-07  |  13KB  |  345 lines

  1. /* Copyright 2009, Boomtango.com.  All Rights Reserved. */
  2. /* historyThumbnail.js
  3.  * Responsible for category view
  4.  */
  5.  
  6. bthistory.controllers["thumbnail"] = {
  7.     onHistoryAdd: function(dataset) {
  8.         bthistory.updateView();
  9.     },
  10.     onHistoryChange: function(data) {
  11.         bthistory.app.debug("thumbnail::onHistoryChange");
  12.     },
  13.     handleUpArrow: function(){
  14.         var sels = document.getElementsByClassName("selected");
  15.         var body = document.getElementById("body");
  16.         var items = document.getElementsByClassName("historyItem");
  17.         if(items.length == 0){
  18.             return;
  19.         }
  20.         if(sels.length == 0){
  21.             var node = items[items.length - 1];
  22.             bthistory.selectNode(node);
  23.         } else {
  24.             var sel = sels[0];
  25.             if(sel.previousSibling){
  26.                 bthistory.selectNode(sel.previousSibling);
  27.             } else {
  28.                 if(sel.parentNode.previousSibling){
  29.                     bthistory.selectNode(sel.parentNode.previousSibling.lastChild);        
  30.                 } else {
  31.                     var nextarrow = document.getElementById("searchprev");
  32.                     if(nextarrow){
  33.                         nextarrow.click();
  34.                     }
  35.                 }
  36.             }
  37.         }
  38.     },
  39.     handleDownArrow: function(){
  40.         var sels = document.getElementsByClassName("selected");
  41.         var body = document.getElementById("body");
  42.         var items = document.getElementsByClassName("historyItem");
  43.         if(items.length == 0){
  44.             return;
  45.         }
  46.         if(sels.length == 0){
  47.             var node = items[0];
  48.             bthistory.selectNode(node);
  49.         } else {
  50.             var sel = sels[0];
  51.             if(sel.nextSibling){
  52.                 bthistory.selectNode(sel.nextSibling);
  53.             } else {
  54.                 if(sel.parentNode.nextSibling){
  55.                     bthistory.selectNode(sel.parentNode.nextSibling.firstChild);        
  56.                 } else {
  57.                     var nextarrow = document.getElementById("searchnext");
  58.                     if(nextarrow){
  59.                         nextarrow.click();
  60.                     }
  61.                 }
  62.             }
  63.         }
  64.     },
  65.     handleResize: function(){
  66.         bthistory.updateView();
  67.     },
  68.     queryTracker: function(types, filter){
  69.         this.calcMetrics();
  70.         return bthistory.storage.queryTrackerByThumbnail(
  71.             bthistory._range.start,
  72.             bthistory._range.end,
  73.             types,
  74.             filter,
  75.             bthistory.currOffset,
  76.             this.numcells
  77.         );
  78.     },
  79.     calcMetrics: function(){
  80.         var body = document.getElementById("body");
  81.         this.width = body.boxObject.width;
  82.         this.height = body.boxObject.height - 20;
  83.         this.colwidth = 240 + 8 + 8;
  84.         this.colheight = 180 +  32 + 8 + 8;
  85.  
  86.  
  87.         this.numcols = Math.max(Math.floor(this.width/this.colwidth), 1);
  88.         this.numrows = Math.max(Math.floor(this.height/this.colheight), 1);
  89.         this.numcells = this.numcols * this.numrows;
  90.     },
  91.     createItem: function(data){
  92.         var box = document.createElement('vbox');
  93.         box.setAttribute('style', 'width: ' + this.colwidth + 'px;');
  94.         box.id = 'thumbnail.' + data.fstrowid;
  95.         box.className = "historyItem";
  96.         box.setAttribute('contentID', data.ftsrowid);
  97.         var hbox, label, spacer;
  98.         var app = bthistory.app;
  99.         var thumbid = app.getThumbID(data.url);
  100.         var thumb = app.getThumb(thumbid.id);
  101.         if(thumb.length){
  102.             var img = document.createElement('image');
  103.             img.setAttribute('src',thumb);
  104.             img.className = 'thumb';
  105.             box.appendChild(img);
  106.         } else {
  107.             var vbox = document.createElement('vbox');
  108.             spacer = document.createElement('spacer');
  109.             spacer.setAttribute('flex', '100');
  110.             spacer.setAttribute('height', '80');
  111.             vbox.appendChild(spacer);
  112.  
  113.             vbox.className = "nothumb";
  114.             label = document.createElement('label');
  115.             label.setAttribute('value', app.getString('history.nopreview'));
  116.             label.className = 'nopreview';
  117.             vbox.appendChild(label);
  118.             spacer = document.createElement('spacer');
  119.             spacer.setAttribute('flex', '100');
  120.             spacer.setAttribute('height', '80');
  121.             vbox.appendChild(spacer);
  122.             /*
  123.             spacer = document.createElement('spacer');
  124.             spacer.setAttribute('flex', '100');
  125.             spacer.setAttribute('height', '180');
  126.             hbox.appendChild(spacer);
  127.  
  128.             label = document.createElement('label');
  129.             label.setAttribute('value', app.getString('history.nopreview'));
  130.             label.className = 'nopreview';
  131.             hbox.appendChild(label);
  132.  
  133.             hbox.appendChild(spacer);
  134.             spacer = document.createElement('spacer');
  135.             spacer.setAttribute('flex', '100');
  136.             spacer.setAttribute('height', '180');
  137.             hbox.appendChild(spacer);
  138.             */
  139.  
  140.             box.appendChild(vbox);
  141.         }
  142.  
  143.         // title
  144.         hbox = document.createElement('hbox');
  145.         spacer = document.createElement('spacer');
  146.         spacer.setAttribute('flex', '100');
  147.         hbox.appendChild(spacer);
  148.         label = document.createElement('label');
  149.         label.setAttribute('flex', '1');
  150.         label.setAttribute('crop', 'end');
  151.         label.setAttribute('value', data.title || data.url);
  152.         hbox.appendChild(label);
  153.         spacer = document.createElement('spacer');
  154.         spacer.setAttribute('flex', '100');
  155.         hbox.appendChild(spacer);
  156.         box.appendChild(hbox);
  157.         
  158.         // date
  159.         hbox = document.createElement('hbox');
  160.         spacer = document.createElement('spacer');
  161.         spacer.setAttribute('flex', '100');
  162.         hbox.appendChild(spacer);
  163.         label = document.createElement('label');
  164.         label.setAttribute('flex', '1');
  165.         label.setAttribute('crop', 'end');
  166.         label.setAttribute('value', bthistory.datestring(data.starttime));
  167.         label.setAttribute('style', 'color: #666;');
  168.         hbox.appendChild(label);
  169.         spacer = document.createElement('spacer');
  170.         spacer.setAttribute('flex', '100');
  171.         hbox.appendChild(spacer);
  172.         box.appendChild(hbox);
  173.  
  174.         return box;
  175.     },
  176.     loadView: function(selectID){
  177.         var data = bthistory._data.data;
  178.         var total = bthistory._data.total;
  179.         var len = data.length;
  180.         this.total = total;
  181.         if(!len){
  182.             var body = document.getElementById("body");
  183.             var label= document.createElement("label");
  184.             label.id = "nodatafound";
  185.             label.setAttribute("value", bthistory.app.getString("history.nodatafound"));
  186.             label.className = "nodatafound";
  187.             body.appendChild(label);
  188.         } else {
  189.             var body = document.getElementById("body");
  190.  
  191.             var container = document.createElement('vbox');
  192.             container.id = "thumb.container";
  193.             
  194.             var grid = document.createElement('grid');
  195.             var columns = document.createElement('columns');
  196.             var rows = document.createElement('rows');
  197.  
  198.             var numcols = this.numcols;
  199.             for(var x=0; x<numcols; x++){
  200.                 var col = document.createElement('column');
  201.                 columns.appendChild(col);
  202.             }
  203.  
  204.             len = Math.min(len, this.numcells);
  205.             var currCol = 0;
  206.             var row = null;
  207.             for(var x = 0; x < len; x++){
  208.                 var item = data[x];
  209.  
  210.                 if(!currCol){
  211.                     if(row){
  212.                         rows.appendChild(row);
  213.                     }
  214.                     row = document.createElement('row');
  215.                 }
  216.                 
  217.                 row.appendChild(this.createItem(item));
  218.                 
  219.                 currCol = (currCol + 1) % numcols;
  220.             }
  221.             rows.appendChild(row);
  222.  
  223.             this.currCol = currCol;
  224.  
  225.             grid.appendChild(columns);
  226.             grid.appendChild(rows);
  227.             container.appendChild(grid);
  228.             body.appendChild(container);
  229.  
  230.             if(selectID){
  231.                 var node = document.getElementById("thumbnail." + selectID);
  232.                 if(node){
  233.                     bthistory.selectNode(node);
  234.                 }
  235.             }
  236.  
  237.             this.loadPagination();
  238.             var header = document.getElementById("body_header");
  239.             var hbox = document.createElement('hbox');
  240.             var label = document.createElement("label");
  241.             label.setAttribute("value",
  242.                 bthistory.app.getString(
  243.                     "results.count",
  244.                     (bthistory.currOffset + 1).toString(),
  245.                     (bthistory.currOffset + data.length).toString(),
  246.                     total.toString()
  247.                 )
  248.             );
  249.             hbox.appendChild(label);
  250.             var  spacer = document.createElement('spacer');
  251.             spacer.setAttribute('flex', '100');
  252.             hbox.appendChild(spacer);
  253.             header.appendChild(hbox);
  254.             header.setAttribute("hidden", "false");
  255.         }
  256.  
  257.     },
  258.     loadPagination: function(){
  259.         var container =  document.getElementById('thumb.container');
  260.         var hbox = document.createElement("hbox");
  261.         var spacer = document.createElement('spacer');
  262.         spacer.setAttribute("flex", "1");
  263.         hbox.appendChild(spacer);
  264.  
  265.         const ITEMSPERPAGE = this.numcells;
  266.  
  267.         if(bthistory.currOffset){
  268.             var vbox = document.createElement("vbox");
  269.             var spacer = document.createElement('spacer');
  270.             spacer.setAttribute("flex", "1");
  271.             vbox.appendChild(spacer);
  272.             var label= document.createElement("image");
  273.             label.id = "searchprev";
  274.             label.className = "resultsarrow";
  275.             label.setAttribute('src', 'chrome://boomtango/skin/arrow_left.png');
  276.             var start = bthistory.currOffset - ITEMSPERPAGE;
  277.             if(start < 0) {
  278.                 start = 0;
  279.             }
  280.             this.loadPageClick(label, start);
  281.             vbox.appendChild(label);
  282.             hbox.appendChild(vbox);
  283.         }
  284.  
  285.         var startIndex = Math.floor(bthistory.currOffset / (ITEMSPERPAGE * 10)) * 10;
  286.         var currIndex = Math.floor(bthistory.currOffset / ITEMSPERPAGE);
  287.         var endIndex = startIndex + 10;
  288.         if(this.total < endIndex * ITEMSPERPAGE){
  289.             endIndex = Math.floor(this.total / ITEMSPERPAGE) + ((this.total % ITEMSPERPAGE) > 0 ? 1 : 0);
  290.         }
  291.  
  292.         for(var x = startIndex; x < endIndex; x++){
  293.             if(x != currIndex){
  294.                 var label= document.createElement("label");
  295.                 var start = x * ITEMSPERPAGE;
  296.                 this.loadPageClick(label, start);
  297.                 label.className = "resultspagelink";
  298.                 label.setAttribute("value", (x + 1).toString());
  299.                 hbox.appendChild(label);
  300.             } else {
  301.                 var label= document.createElement("label");
  302.                 var start = x * ITEMSPERPAGE;
  303.                 label.className = "resultscurrpage";
  304.                 label.setAttribute("value", (x + 1).toString());
  305.                 hbox.appendChild(label);
  306.             }
  307.         }
  308.  
  309.         if(bthistory.currOffset + ITEMSPERPAGE < this.total){
  310.             var vbox = document.createElement("vbox");
  311.             var spacer = document.createElement('spacer');
  312.             spacer.setAttribute("flex", "1");
  313.             vbox.appendChild(spacer);
  314.             var label= document.createElement("image");
  315.             label.className = "resultsarrow";
  316.             label.setAttribute('src', 'chrome://boomtango/skin/arrow_right.png');
  317.             label.id = "searchnext";
  318.             var start = bthistory.currOffset + ITEMSPERPAGE;
  319.             this.loadPageClick(label, start);
  320.             vbox.appendChild(label);
  321.             hbox.appendChild(vbox);
  322.         }
  323.  
  324.         var spacer = document.createElement('spacer');
  325.         spacer.setAttribute("flex", "1");
  326.         hbox.appendChild(spacer);
  327.         container.appendChild(hbox);
  328.     },
  329.     gotoPage: function(start){
  330.         bthistory.currOffset = start;
  331.         bthistory.resetHash();
  332.         bthistory.updateView();
  333.     },
  334.     loadPageClick: function(label, start){
  335.         var self = this;
  336.         label.addEventListener(
  337.             "click",
  338.             function(){
  339.                 self.gotoPage(start);
  340.             },
  341.             false
  342.         );
  343.     }
  344. };
  345.